// 给定一个含有 n 个正整数的数组和一个正整数 target 。
// 找出该数组中满足其总和大于等于 target 的长度最小的 连续
// 子数组
//  [numsl, numsl+1, ..., numsr-1, numsr] ，并返回其长度。如果不存在符合条件的子数组，返回 0 。
// 示例 1：

// 输入：target = 7, nums = [2,3,1,2,4,3]
// 输出：2
// 解释：子数组 [4,3] 是该条件下的长度最小的子数组。

// 方法一
// var minSubArrayLen = function(target, nums) {
//     let len =nums.length
//     let min = Infinity
//     for(let i=0;i<len;i++){
//         for(let j=i;j<len;j++){
//             if(judge(target,nums,i,j)){
//                 min = Math.min(min,j-i+1)
//                 break
//             }
//         }
//     }
//     return min===Infinity?0:min

//     function judge(target,nums,i,j){
//         let sum = nums.reduce((a,b,index)=>{
//             if(index>=i&&index<=j){
//                 return a+b
//             }
//           return a
//         },0)
//         console.log('sum:',sum,i,j)
//         return sum>=target?true:false
//     }
// };


// 方法二
// var minSubArrayLen = function (target, nums) {
//     let len = nums.length
//     let min = Infinity
//     let left = 0
//     for (let right = left; right < len; right++) {
//         if (judge(target, nums, left, right)) {
//             min = Math.min(min, right - left + 1)
//             right=left++
//         }
//     }
//     return min === Infinity ? 0 : min

//     function judge(target, nums, i, j) {
//         let sum = nums.reduce((a, b, index) => {
//             if (index >= i && index <= j) {
//                 return a + b
//             }
//             return a
//         }, 0)
//         return sum >= target ? true : false
//     }
// };


var minSubArrayLen = function(target, nums) {
    let len = nums.length
    let left=0,min=len+1
    sum=0
    for(let right =0;right<len;right++){
        sum+=nums[right]
        while(sum-nums[left]>=target){
            sum-=nums[left++]
        }
        if(sum>=target){
            min=Math.min(min,right-left+1)
        }
    }
    return min<=len?min:0
};
console.log(minSubArrayLen(7, [2, 3, 1, 2, 4, 3]))
